package main

import (
	"fmt"
)

type personF struct {
	name string
	age  int
}

func main() {
	p1 := personF{name: "Tom"}
	fmt.Printf("%p \n", &p1)      // 这里必须加&
	fmt.Printf("%p \n", &p1.name) // 这里必须加&
	println(p1.toString())
	p1.modifyName("Jenny")		  // 这里go自动把p1转成(&p1)
	println(p1.name)
	(&p1).modifyName("Honey")	  // 标准的用法, 但是没必要
	println(p1.name)
}

// 值传递,传整个副本
func (p personF) toString() string {
	fmt.Printf("toString: %p \n", &p)
	return p.name
}

func (p *personF) modifyName(name string) {
	p.name = name
	fmt.Printf("modifyName: %p \n", p)
}
